import string
import typing
from typing import Iterable, NamedTuple, Optional, Union

from aiogram.fsm.state import StatesGroup, State
from aiogram.types import BotCommandScopeAllChatAdministrators, BotCommand, BotCommandScopeChat

import config

Chat_id = int
Channel_id = int


class User(NamedTuple):
    client_id: int
    chats_id: Iterable[int]
    stop_words: Iterable[str]
    require_channel_id: dict[Chat_id: typing.Iterable[Channel_id]]


class Ads(NamedTuple):
    id: int
    text: str
    path_photo: Optional[str]


class ScheduledMessage(NamedTuple):
    message_id: Union[int | None]
    chat_id: int
    text: str


async def default_command(bot):
    #     for admin_id in config.ADMIN_ID:
    #         await dp.bot.set_my_commands([
    #             BotCommand('help', 'показать все комманды'),
    #             BotCommand('stop_add', 'Напиши после команды слово которое ловить и удалять'),
    #             BotCommand('stop_del', 'Напиши после команды слово которое хочешь удалить из базы'),
    #             BotCommand('stop_list', 'Показать все стоп-слова')
    #         ], BotCommandScopeChat(chat_id=admin_id))
    #     await dp.bot.set_my_commands([
    #         BotCommand('help', 'показать все комманды'),
    #         BotCommand('channel_add', 'Добавить канал в обязательный к подписке'),
    #         BotCommand('channel_del', 'Удалить канал из обязательных к подписке'),
    #         BotCommand('channel_list', 'Показать каналы этого чата'),
    #         BotCommand('stop_add', 'Напиши после команды слово которое ловить и удалять'),
    #         BotCommand('stop_del', 'Напиши после команды слово которое хочешь удалить из базы'),
    #         BotCommand('stop_list', 'Показать все стоп-слова'),
    #     ], BotCommandScopeAllChatAdministrators())

    await bot.set_my_commands(commands=[
        BotCommand(command='start', description='Старт бота'),
        BotCommand(command='help', description='Показать справку'),
    ])


class StopWordsStates(StatesGroup):
    add = State()
    delete = State()


class DefStopWordsStates(StatesGroup):
    add = State()
    delete = State()


class RequireChannelsStates(StatesGroup):
    add = State()
    delete = State()


class AdsStates(StatesGroup):
    add = State()

async def validate_db_data():
    ...

